<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">


    <!--vue的组件事件传递
        我们可以通过组件的事件传递，间接的把子组件的数据传递给父组件
    -->

    <!--使用全局组件,传递静态数据-->
    <login :num="12333"></login>

    <!--使用局部组件,传递动态数据-->
    <input type="text" v-model="numdata">
    <!--传递事件，使用@key=value形式 在子组件中调用$emit方法执行，并且可以携带参数-->
    <logintest :agetest="numdata" @testparent="test"></logintest>

</div>


</body>
</html>

<script src="resource/vue.js"></script>

<script>


//    //定义一个全局组件，参数1：组件名字，参数2：组件的配置对象
   Vue.component('login',{
       template:'<div><h2>登录界面----{{num}}----------{{msg}}</h2></div>',//推荐使用div包裹。因为需要有一个根节点
       data(){
           return{
               testnum:this.num,
               msg:"这是测试数据！！！！",
			   
           }
       },
       props:['num'],

   });

    //局部组件也有自己的生命周期
    //此处定义一个局部loginTest组件，并在vue中直接注册
    const logintest = {
        template: '<div><h1>登录---{{age}}-----{{agetest}}</h1><button @click="edittest">点击我修改父组件的内容</button></div>',//定义组件的html代码
        data(){     //局部组件中定义数据，只能是函数，然后加return，日后直接使用{{}}取值
            return {
                // msg:"这是登录方法",//通过return返回数据
                age:1000
            }
        },
        props:['agetest'],//父组件传过得来的数据不能直接改变，因为是单向数据流，子组件不能影响父组件
        methods:{
            edittest(){
                alert("子组件的事件")
                this.$emit('testparent',this.age);//调用父组件中的方法，并传递参数
            }
        }
    };

    //父组件
    const app = new Vue({
        el:"#app",
        data: {
            msg:"vue 组件使用",
            numdata:100
        },
        methods:{
            test(count){
                alert("父组件"+count)
            }
        },
        components:{//在这里注册局部组件
            logintest,
            //注册局部组件
        }
    });


</script>